/*
 * 编写一个程序，读取一个浮点数，先打印成小数点形式，再打印成指数形式。
 * 然后，如果系统支持，再打印成p记数法（即十六进制记数法）。
 * 按以下格式输出（实际显示的指数位数因系统而异）：
 * Enter a floating-point value: 64.25
 * fixed-point notation: 64.250000
 * exponential notation: 6.425000e+01
 * p notation: 0x1.01p+6
 * */

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool is_valid_double(const char *input){
    char *endptr;
    strtod(input,&endptr);
    return *endptr=='\0';
}

int main(){
    char input[100];
    double num;
    while(1){
        printf("Enter a floating-point value：");
        scanf("%s",input);
        if(input[0]=='q'){
        	printf("退出。\n");
    		break;
        }
	else if(!is_valid_double(input)){
		printf("输入不合法！\n");
	}
	else
	{
		num=atof(input);
		printf("fixed-point notation: %.6f\n",num);
		printf("exponential notation: %e\n",num);
		printf("p notation: %a\n",num);
	}
    }
}
